package myjava.overriding;

public class Root3 {

   public static void main(String[] args) {

      A a = new A();
      B b = new B();

      a.foo();
      // esegue il metodo doo overridato e permette percio' il polimorfismo
      // anche dei metodi invocati da altri metodi e non solo dei metodi
      // invocati direttamente
      // [!] non vero per gli attributi
      b.foo();
   }
}

class A {

   protected String x = "x in A";

   protected void doo() {
      System.out.println("doo in A");
   }

   public void foo() {
      System.out.println(this.x);
      this.doo();
   }
}

class B extends A {

   protected String x = "x in B";

   @Override
   protected void doo() {
      System.out.println("doo in B");
   }
}